﻿namespace Diplom.Graphics.D3D.Helpers
{
    using System;
    using System.Drawing;

    /// <summary>
    /// Класс генерации цветов для заливки
    /// </summary>
    public static class GenerateColor
    {
        #region Method

        /// <summary>
        /// Вычисляет цвет
        /// </summary>
        /// <param name="CountIso">Количество изолиний</param>
        /// <param name="index">Индекс</param>
        /// <returns></returns>
        public static Color GetColor(int CountIso, int index)
        {
            if (index < 0 || index > CountIso)
            {
                throw new IndexOutOfRangeException();
            }

            // Какие-то магические числа, не понял почему такие,
            // но работает с ними красиво
            double MMin = 1;
            double MMax = 1200;

            double dm = (MMax - MMin) / (CountIso - 1);

            int R = 0, G = 0, B = 0;
            double m_rab = MMin + index * dm;

            int di, mo;
            di = (int)m_rab / 256;
            mo = (int)(m_rab - di * 256);
            switch (di)
            {
                case 0:
                    R = 0;
                    G = mo;
                    B = 255;
                    break;
                case 1:
                    R = 0;
                    G = 255;
                    B = 255 - mo;
                    break;
                case 2:
                    R = mo;
                    G = 255;
                    B = 0;
                    break;
                case 3:
                    R = 255;
                    G = 255 - mo;
                    B = 0;
                    break;
                case 4:
                    R = 255;
                    G = 0;
                    B = mo;
                    break;
                case 5:
                    R = 255 - mo;
                    G = 0;
                    B = 255;
                    break;
            }

            return Color.FromArgb(R, G, B);
        }

        #endregion
    }
}
